# author destiny1
# Date: 2023/8/8 16:18
import threading
import time

class MyThread1(threading.Thread):
    def run(self):
        # 对 mutexA 上锁
        mutexA.acquire()
        # mutexA 上锁后，延时 1 秒，等待另外那个线程 把 mutexB 上锁
        print(self.name+'----do1---up----')
        time.sleep(1)
        # 此时会堵塞，因为这个 mutexB 已经被另外的线程抢先上锁了
        mutexB.acquire()
        print(self.name+'----do1---down----')
        mutexB.release()
        # 对 mutexA 解锁
        mutexA.release()
class MyThread2(threading.Thread):
    def run(self):
        # 对 mutexB 上锁
        mutexB.acquire()
        # mutexB 上锁后，延时 1 秒，等待另外那个线程 把 mutexA 上锁
        print(self.name+'----do2---up----')
        time.sleep(1)
        # 此时会堵塞，因为这个 mutexA 已经被另外的线程抢先上锁了
        mutexA.acquire()
        print(self.name+'----do2---down----')
        mutexA.release()
        # 对 mutexB 解锁
        mutexB.release()

if __name__ == '__main__':
    mutexA = threading.Lock()
    mutexB = threading.Lock()
    t1 = MyThread1()
    t2 = MyThread2()
    t1.start()
    t2.start()